Módulo:Gamebox
local getArgs = require('Module:Arguments').getArgs local getGames = require('Module:Gamedata') local p = {} local function makeInvokeFunction(funcName) -- makes a function that can be returned from #invoke, using -- Module:Arguments. return function (frame) local args = getArgs(frame, {parentOnly = true}) return pfuncName(args) end end local stylet = '\n|-\n|style="font-size:100%; text-align:center;background:#222;" colspan=2|' local function cate(catename,sort) if not mw.title.getCurrentTitle():inNamespace('') then return '' end if sort then sort = '|' .. sort else sort = '' end return 'Category:' .. catename .. sort .. '' end local t = { 'image'={'image'}, 'image_width'={'image_width',default='240px'}, 'image_bg'={'image_bg'}, 'japan'={'japan'}, 'romaji'={'romaji'}, 'Developer'={'developer'}, 'Publisher'={'publisher'}, 'Genre'={'genre'}, 'Platform'={'platform(s)','platform'}, 'Japan'={'release-date-japan','releasej'}, United States'={'release-date-north-america','releasena'}, 'Europe' ={'release-date-europe','releaseeu'}, 'Australia'={'release-date-australasia','releaseau'}, 'cname'={'name',default=mw.title.getCurrentTitle().text}, -- Character's name known as'={'aka'}, Name'={'japan','kana'}, 'Romaji'={'romaji'}, 'rpname'={'RPname','rpname',h='Revelations Name'}, Appearance'={'first appearance','first'}, 'Affiliation'={'affiliation'}, 'Alignment'={'alignment'}, 'Team'={'team'}, -- Strange Journey 'Occupation'={'job','occupation'}, 'Rank'={'rank'}, -- Strange Journey 'Ship'={'ship'}, -- Strange Journey 'Country'={'country'}, -- Strange Journey 'Reason'={'reason'}, -- Nocturne Sponsor'={'demonic sponsor','sponsor'}, -- Nocturne 'Origin'={'origin'}, 'Weapon'={'weapon'}, Partner'={'demonpartner'}, -- Devil Child 'Tribe'={'tribe'}, -- DDSaga Type'={'gun'}, Avatar'={'avatar'}, -- DDSaga Atma Avatar Brand'={'brand'}, -- DDSaga Atma brand Location'={'location'}, -- DDSaga Atma brand location of Birth'={'birthday','dob'}, 'Age'={'age'}, 'Zodiac'={'zodiac'}, 'Height'={'height'}, 'Weight'={'weight'}, Color'={'comp'}, -- Devil Survivor 1 character's COMP color Phone Color'={'cell'}, -- Devil Survivor 2 character's cel phone color 'Residency'={'home'}, Demon'={'allieddemon'}, -- General-purposed, primarily for Shin Megami Tensei IV Final Demon'={'fatedemon'}, -- Demon fusions unlocked by raising Devil Survivor 2 character's Fate rank Demon'={'animedemon'}, -- Allied demons summoned in Devil Survivor 2 anime Type'={'blood','blood type'}, Weapon'={'melee'}, Weapon'={'ranged'}, 'Arcana'={'arcana'}, -- Persona series 'Arcana2'={'arcana2',h='Secondary Arcana'}, -- Persona 1 and 2 'Persona'={'persona'}, -- Character's signature Persona(s) 'Class'={'class'}, -- SMTxFE Partner'={'miragepartner'}, -- SMTxFE 'Theme'={'theme','song'}, -- Character's theme music 'Likes'={'likes'}, 'Dislikes'={'dislikes'}, 'Nationality'={'nationality','nation'}, 'Ethnicity'={'ethnicity','ethnic'}, VA'={'japaneseva','Japanese VA'}, VA'={'englishva','English VA'}, } local game_stat_order1 = { 'Developer', 'Publisher', 'Genre', 'Platform', } local game_stat_order2 = { 'Japan', 'the United States', 'Europe', 'Australia', } local char_stat_order = { 'Also known as', 'Japanese Name', 'Romaji', 'rpname', 'First Appearance', 'Nationality', 'Ethnicity', 'Affiliation', 'Alignment', 'Team', 'Occupation', 'Rank', 'Ship', 'Country', 'Reason', 'Demonic Sponsor', 'Origin', 'Weapon', 'Demon Partner', 'Tribe', 'Firearm Type', 'Atma Avatar', 'Atma Brand', 'Brand Location', 'Date of Birth', 'Age', 'Zodiac', 'Height', 'Weight', 'COMP Color', 'Cell Phone Color', 'Residency', 'Allied Demon', 'Fate Demon', 'Anime Demon', 'Blood Type', 'Melee Weapon', 'Ranged Weapon', 'Arcana', 'Arcana2', 'Persona', 'Class', 'Mirage Partner', 'Theme', 'Likes', 'Dislikes', 'Japanese VA', 'English VA', } local function get_prop(args) local prop = {} for k, v in pairs(t) do for _, name in ipairs(v) do if argsname then propk = argsname break end end propk = propk or v.default end return prop end p.game = makeInvokeFunction('_game') function p._game(args) local prop = get_prop(args) local game = args1 or args.class or args.game or args.Game or '' local gameg -- Game general style if getGames.gamesgame.fallback then gameg = getGames.gamesgame.fallback -- e.g. 'p3f' and 'p3p' will fall back to 'p3' if applicable. else gameg = game end local gamen = getGames.gamesgame.name -- Full game name local gamegn = getGames.gamesgameg.name -- e.g. 'Persona 3 FES' will fall back to 'Persona 3' if applicable. if not prop.image_bg then prop.image_bg = '#333' end local styleg = '\n|-\n!style="background: ' .. getGames.gamesgameg.colorbg .. ';color: ' .. getGames.gamesgameg.font .. '"' local styleh = styleg .. '|' local stylec = styleg .. ' colspan=2|' local result if prop.image then prop.image = '\n|-\n| style="border-radius:3.5px; background:' .. prop.image_bg .. '" colspan="2" align="center" | ' else prop.image = '' end result = ' ' .. cate('Games') if gameg 'mt1' or gameg 'mt2' then result = result .. cate('Megami Tensei Series') elseif gameg 'smt1' or gameg 'smt2' or gameg 'smtif' or gameg 'smt3' or gameg 'smt9' or gameg 'smtim' or gameg 'smtsj' or gameg 'smt4' then result = result .. cate('Shin Megami Tensei Series') elseif gameg 'lb1' or gameg 'lb2' or gameg 'alb' or gameg 'lb3' or gameg 'lbs' or gameg 'lbnt1' or gameg 'lbnt2' or gameg 'lbnt3' then result = result .. cate('Last Bible Series') elseif gameg 'majin1' or gameg 'majin2' then result = result .. cate('Majin Tensei Series') elseif gameg 'smtds' or gameg 'sh' or gameg 'raidou1' or gameg 'raidou2' then result = result .. cate('Devil Summoner') elseif gameg 'p1' or gameg 'p2is' or gameg 'p2ep' or gameg 'p3' or gameg 'pts' or gameg 'p4' or gameg 'pq' or gameg 'p5' then result = result .. cate('Persona Series') elseif gameg 'childred' or gameg 'childblack' or gameg 'childwhite' or gameg 'childlight' or gameg 'childfire' or gameg 'childice' or gameg 'childmessiah' then result = result .. cate('Devil Children') elseif gameg 'ddsaga1' or gameg 'ddsaga2' then result = result .. cate('Digital Devil Saga') elseif gameg 'desu1' or gameg 'desu2' then result = result .. cate('Devil Survivor Series') end if gameg 'childred' or gameg 'childblack' then result = result .. cate('Devil Children Red/Black Book','!') elseif gameg 'childmessiah' then result = result .. cate('Messiah Riser','!') elseif gameg '' then elseif gameg then result = result .. cate(gamen,'!') end return result end p.char = makeInvokeFunction('_char') function p._char(args) local prop = get_prop(args) local game = args1 or args.class or args.game or args.Game or '' local gameg if getGames.gamesgame.fallback then gameg = getGames.gamesgame.fallback else gameg = game end local gamen = getGames.gamesgame.name local gamegn = getGames.gamesgameg.name local styleg = '\n|-\n!style="background: ' .. getGames.gamesgameg.colorbg .. ';color: ' .. getGames.gamesgameg.font .. '"' local styleh = styleg .. '|' local stylec = styleg .. ' colspan=2|' local result = ' ' if args.Part 'both' or args.Part 'Both' then if game 'p2is' then result = result .. cate(getGames.games'p2is'.name .. ' Characters') .. cate(getGames.games'p2ep'.name .. ' Characters') elseif game 'smtds' then result = result .. cate(gamen .. ' Characters') .. cate(getGames.games'sh'.name .. ' Characters') elseif game 'raidou1' then result = result .. cate(gamen .. ' Characters') .. cate(getGames.games'raidou2'.name .. ' Characters') elseif game 'desu2' then result = result .. cate(gamen .. ' Characters') .. cate(getGames.games'desu2rb'.name .. ' Characters') end elseif args.Part 'All' or args.Part 'all' then if game 'p3' then result = result .. cate(gamen .. ' Characters') .. cate(getGames.games'p3f'.name .. ' Characters') .. cate(getGames.games'p3p'.name .. ' Characters') elseif game 'p4' then result = result .. cate(gamen .. ' Characters') .. cate(getGames.games'p4g'.name .. ' Characters') .. cate(getGames.games'p4a'.name .. ' Characters') .. cate(getGames.games'p4d'.name .. ' Characters') end elseif gamen ~= nil then result = result .. cate(gamen .. ' Characters') end if args.alignment 'Law' then result = result .. cate('Law-Aligned Characters') elseif args.alignment 'Neutral' then result = result .. cate('Neutral-Aligned Characters') elseif args.alignment 'Chaos' then result = result .. cate('Chaos-Aligned Characters') end return result end return p -- --Category:Modules --!